//: Playground - noun: a place where people can play

import UIKit

//: # swfit 读书笔记

//: ## 方法

//: ### 在实例方法中修改值类型：如果你确实需要在某个特定的方法中修改结构体或者枚举的属性，你可以为这个方法选择可变(mutating)行为
print("_____________________在实例方法中修改值类型_____________________________")
struct Point{
    var x = 0.0,y = 0.0
    mutating func changePoint(derationX:Double,deractionY:Double){
        x = x + derationX
        y = y + deractionY
    }
}

// 这里的 必须用变量 var 出事化 let不能修改属性
var methodPoint = Point (x: 1.0, y: 1.0)
methodPoint.changePoint(derationX: 2.0, deractionY: 2.0)
print("Point - \(methodPoint.x,methodPoint.y)")

//: 简写
struct pointTwo{
    var x = 0.0,y = 0.0
    mutating func changePoint(derationX:Double,deractionY:Double){
        self = pointTwo (x: 3.0, y: 3.0)
    }
}

enum TriStateSwitch{
    case Low,Middle,High
    
    mutating func next(){
        switch self {
        case .Low:
            self = .Middle
        case .Middle:
            self = .High
        case .High:
            self = .Low
        }
    }
}
var triState = TriStateSwitch.Low
triState.next()
print("triState - \(triState)")
//: ### 类型方法:在方法的func关键字之前加上关键字static，来指定类型方法。类还可以用关键字class来允许子类重写父类的方法实现
class ClassMethod{
    class func method(){
        print("我是类方法")
    }
}
ClassMethod.method()


